package interfaz;

import jugador.Jugador;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.layout.VerticalLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.windows.Window;
import org.uqbar.arena.windows.WindowOwner;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.commons.model.Search;

import adapter.MesaAdapter;


import adapter.MesaAdapter;
import apuesta.Apuesta;

public class MesaWindow extends Window<MesaAdapter> {

	public static final String UNIRJUGADOR="unirJugador";
	public static final String NOVAMAS="noVaMas";
	public static final String RETIRARSE="retirarse";
	public static final String APOSTAR = "apostar";
	public static final String CAMBIARFICHAS = "cambiarFichas";
	public static final String CREARAPUESTA="crearApuesta";
	
	
	
	public MesaWindow(WindowOwner parent, MesaAdapter model) {
		super(parent, model);
		
	}
	@Override
	public void createContents(Panel mainPanel) {
		
		this.setTitle("Ruleta Jorge");
		this.configureLayout(mainPanel);
		this.createPanelJugadorAcciones(mainPanel);
		this.createPanelMesaApuestas(mainPanel);
	}

	private void configureLayout(Panel mainPanel) {
		
		mainPanel.setLayout(new ColumnLayout(2));
		
	}
	
	private void createPanelJugadorAcciones(Panel mainPanel){
		
		this.crearJugadorActions(mainPanel);
		this.crearJugadorLabel(mainPanel);
		this.crearJugadorList(mainPanel);
				
	}
	
	private void createPanelMesaApuestas(Panel mainPanel){
		
		this.crearMesaActions(mainPanel);
		this.crearMesaList(mainPanel);	
	}
	
	
	private void crearJugadorActions(Panel mainPanel) {
		
		Panel panelJugadorAcciones= new Panel(mainPanel);
		panelJugadorAcciones.setLayout(new VerticalLayout());
		
		NotNullObservable elementSelected = new NotNullObservable(MesaAdapter.SELECTED);

		
		Button retirarse = new Button(panelJugadorAcciones);
		retirarse.setCaption("Retirarse");
		retirarse.disableOnError();
		retirarse.bindEnabled(elementSelected);
		retirarse.onClick(new MessageSend(this,RETIRARSE));
		
		
		Button apostar = new Button(panelJugadorAcciones);
		apostar.setCaption("Apostar");
		apostar.bindEnabled(elementSelected);
		apostar.disableOnError();
		apostar.onClick(new MessageSend(this, CREARAPUESTA));
		

		
		Button cambiarfichas = new Button(panelJugadorAcciones);
		cambiarfichas.setCaption("Cambiar fichas");
		cambiarfichas.bindEnabled(elementSelected);
		cambiarfichas.onClick(new MessageSend(this, CAMBIARFICHAS));
	}
	
	private void crearJugadorList(Panel mainPanel) {
		
		Panel JugadorList= new Panel(mainPanel);
		Table<Jugador> table= new Table<Jugador> (JugadorList ,Jugador.class);
		table.bindContentsToProperty(MesaAdapter.JUGADORES);
		table.bindSelection(MesaAdapter.SELECTED);
		
		Column<Jugador> nombreColumn = new Column<Jugador>(table);
		nombreColumn.setTitle("Jugadores");
		nombreColumn.setFixedSize(100);
		nombreColumn.setWeight(2000);
		nombreColumn.bindContentsToProperty(Jugador.NOMBRE);
		
		
	}
	
	private void crearJugadorLabel(Panel mainPanel) {
			
		Panel jugadorDatos = new Panel(mainPanel);
		jugadorDatos.setLayout(new VerticalLayout());
		
		Label bienvenido=new Label(jugadorDatos);
		bienvenido.setText("Bienvenido ");
		
		Label nombre = new Label(jugadorDatos);
		nombre.bindValueToProperty(MesaAdapter.NOMBREACTUAL);
		
		Label cant=new Label(jugadorDatos);
		cant.setText("Cantidad de fichas: "); 
		
		Label fichas = new Label(jugadorDatos);
		fichas.bindValueToProperty(MesaAdapter.FICHAS);
		
		
		Label text=new Label(jugadorDatos);
		text.setText("¿Qué desea hacer?");
		
	}
	
	
	
	private void crearMesaList(Panel mainPanel) {
		
		Panel MesaList= new Panel(mainPanel);
		Table<Apuesta> table= new Table<Apuesta> (MesaList ,Apuesta.class);
		table.bindContentsToProperty(MesaAdapter.APUESTAS);
		
		Column<Apuesta> nombreColumn = new Column<Apuesta>(table);
		nombreColumn.setTitle("Apuesta");
		nombreColumn.setFixedSize(100);
		nombreColumn.bindContentsToProperty(Apuesta.TIPO);
		
		Column<Apuesta> nombreColumn2 = new Column<Apuesta>(table);
		nombreColumn2.setTitle("Fichas");
		nombreColumn2.setFixedSize(100);
		nombreColumn2.bindContentsToProperty(Apuesta.FICHAS);
		
		table.setHeigth(200);
		table.setWidth(300);
		
	}	
	
	private void crearMesaActions(Panel mainPanel) {
		
		Panel panelMesaAcciones= new Panel(mainPanel);
		panelMesaAcciones.setLayout(new VerticalLayout());
		
		Button novamas = new Button(panelMesaAcciones);
		novamas.setCaption("No va mas!");
		novamas.onClick(new MessageSend(this, NOVAMAS));
		
		Button unirJugador = new Button(panelMesaAcciones);
		unirJugador.setCaption("Unir jugador");
		unirJugador.onClick(new MessageSend(this,UNIRJUGADOR));
		

	}
	
	public void unirJugador(){

		new UnirPersonaAMesaWindow(getOwner(), this.getModel()).open();
	}
	
	public void cambiarFichas(){
		
		new CambiarFichasWindow(getOwner(), this.getModel()).open();
		
	}
	
	public void noVaMas(){
		
		this.getModel().noVaMas();
		new NoVaMasWindow(getOwner(),this.getModel()).open();
	}
	
	public void retirarse(){
		
		new RetirarseWindow(getOwner(),this.getModel()).open();
		this.getModel().retirarse();
		
		
	}
	
	public void crearApuesta(){
		
		new CrearApuestaWindow(getOwner(), this.getModel()).open();
		
	}
	
}	